# 回归 lightGBM GBDT xgboost 都是决策树方法的升级

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# matplotlib inline

from scipy import stats
from scipy.stats import norm

train = pd.read_csv('D:\服创\数数数学学学建建建模模模\数据挖掘与机器学习算法\python与大数据\house-prices-advanced-regression-techniques/train.csv')
test = pd.read_csv('D:\服创\数数数学学学建建建模模模\数据挖掘与机器学习算法\python与大数据\house-prices-advanced-regression-techniques/test.csv')
# 一共75个变量 查看这些变量都是什么
print(train.columns)
# 详细查看变量的信息 可以显示有缺值的变量项
print(train.info())
# 查看一下前五行情况
print(train.head(5))

# 用corr（）协方差分析表   方法来查看一下变量之间的相关性，这里是除掉了ID列之后的数据集 （全部79个变量）
# 返回结果接近0说明无相关性,大于0说明是正相关,小于0是负相关.
train_corr = train.drop('Id',axis=1).corr()
# print(train_corr)
# # 画出相关性热力图
# a = plt.subplots(figsize=(8, 6))#调整画布大小
# a = sns.heatmap(train_corr, vmax=.8, square=True)#画热力图   annot=True 显示系数  颜色越浅，二者相关性越强

# 寻找K个最相关的特征信息
k = 10 # 热力图上的变量数
cols = train_corr.nlargest(k,'SalePrice')['SalePrice'].index # 寻找k个与SalePrice变量最相关的特征变量
cm = np.corrcoef(train[cols].values.T)
sns.set(font_scale=1.5)
hm = plt.subplots(figsize=(8,6)) # 调整画布大小
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)

# 结论： 要砍掉几个，没必要的，影响回归的分析
# 1. GarageCars 和 GarageAre 相关性很高、就像双胞胎一样，所以我们只需要其中的一个变量，例如：GarageCars。   > 0.8
# 2. TotalBsmtSF  和 1stFloor 与上述情况相同，我们选择 TotalBsmtS
# 3. GarageAre 和 TotRmsAbvGrd 与上述情况相同，我们选择 GarageAre

# 特征工程
test['SalePrice'] = None
train_test = pd.concat((train, test)).reset_index(drop=True) # 数据集合并 重新获得索引值 drop空白处也给到索引
# 缺失值检测及处理 全部的数据集：
print('缺失值检测：')
total= train_test.isnull().sum().sort_values(ascending=False) # 空值数量
percent = (train_test.isnull().sum()/train_test.isnull().count()).sort_values(ascending=False) # 空值的率
missing_data = pd.concat([total, percent], axis=1, keys=['Total','Lost Percent']) # 设置表头
print(missing_data[missing_data.isnull().values==False].sort_values('Total', axis=0, ascending=False).head(79))

# 结论：
# 1. 对于缺失率过高的特征，例如 超过15% 我们应该删掉相关变量且假设该变量并不存在
# 2. GarageX 变量群的缺失数据量和概率都相同，可以选择一个就行，例如：GarageCars
# 3. 对于缺失数据在5%左右（缺失率低），可以直接删除/回归预测





plt.show()

















